<div class="chapter">
<a name="feature-matrix"></a>
<h1 class="chapter">AuDAO Features - Compatibility Matrix</h1>

<p class="chapter-abstract">
	In this chapter we would like to list all available features of the AuDAO generator.
	The current AuDAO version 1.2 (release 2010-02-25) contains the following features.
</p>


<div class="section">
<a name="sqlmatrix"></a>
<h2>SQL Feature Matrix</h2>

<p>
	AuDAO let's you to generate SQL create and drop scripts.
	This is useful for standard database like MySQL and Oracle.
	As for Google App Engine you can use only index related features.
</p>

<table class="matrix" width="100%">
	<tr class="header">
		<td>Feature</td>
		<td>MySQL</td>
		<td>Oracle DB</td>
		<td>HSQLDB</td>
		<td>Google App Engine</td>
		<td>Google App Engine - JDO</td>
	</tr>

	<tr class="sql">
		<td><a href="[sql-features]#sqlpk">primary keys</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sql">
		<td><a href="[sql-features]#sqlindex">indexes</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sql">
		<td><a href="[sql-features]#sqlfk">foreign keys</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sql">
		<td><a href="[sql-features]#sqlseq">sequences</a></td>
		<td class="ko">no</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sql">
		<td><a href="[sql-features]#sqldata">data</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

</table>

</div>


<div class="section">
<a name="daomatrix"></a>
<h2>DAO Feature Matrix</h2>

<p>
	AuDAO let's you to generate Java DAO classes.
	If we say "DAO" we mean DAO and all related stuff like DTO and DAO implementation classes.
</p>

<table class="matrix" width="100%">
	<tr class="header">
		<td>Feature</td>
		<td>MySQL</td>
		<td>Oracle DB</td>
		<td>HSQLDB</td>
		<td>Google App Engine</td>
		<td>Google App Engine - JDO</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeBoolean">type boolean</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeShort">type short</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeInt">type int</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeLong">type long</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeDouble">type double</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeString">type String</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeDate">type Date</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">emulated</td>
		<td class="ok">emulated</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeTimestamp">type Timestamp</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">emulated</td>
		<td class="ok">emulated</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeByteArray">type byte[]</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeSerializable">type Serializable</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#typeList">type List</a></td>
		<td class="ko">no</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#enums">enumerations</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#transient">transient columns</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#primary-keys">primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#parent-keys">parent key</a></td>
		<td class="ok">ignored</td>
		<td class="ok">ignored</td>
		<td class="ok">ignored</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#ancestor-keys">ancestor key</a></td>
		<td class="ok">ignored</td>
		<td class="ok">ignored</td>
		<td class="ok">ignored</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#autoincrement-pk">autoincrement pk</a></td>
		<td class="ok">autoincrement</td>
		<td class="ok">sequence</td>
		<td class="ok">sequence</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#autoincrement-pk">autoincrement not pk</a></td>
		<td class="ko">no</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#auto-date">auto date</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#auto-timestamp">auto timestamp</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodCount">method count</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodDelete">method delete</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodFind">method find</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodInsert">method insert</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodMove">method move</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodTruncate">method truncate</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#methodUpdate">method update</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderAll">all finder</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderDynamic">dynamic finder</a></td>
		<td class="ok">SQL</td>
		<td class="ok">SQL</td>
		<td class="ok">SQL</td>
		<td class="ok">GQL</td>
		<td class="ok">JDOQL</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderPk">primary key finder</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderIndex">index finder</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderCondition">condition finder</a></td>
		<td class="ok">SQL</td>
		<td class="ok">SQL</td>
		<td class="ok">SQL</td>
		<td class="ok">GQL</td>
		<td class="ok">JDOQL</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#finderRef">reference finder</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#insertAll">batch insert</a></td>
		<td class="ok">emulated</td>
		<td class="ok">emulated</td>
		<td class="ok">emulated</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#countAll">count all</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#countDynamic">count dynamic</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#countByIndex">count by index</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#countByCondition">count by condition</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#countByRef">count by reference</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#deleteByPrimaryKey">delete by primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#deleteAll">delete all</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">max 500 rows</td>
		<td class="ok">max 500 rows</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#deleteDynamic">delete dynamic</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">max 500 rows</td>
		<td class="ok">max 500 rows</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#deleteByIndex">delete by index</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">max 500 rows</td>
		<td class="ok">max 500 rows</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#deleteByCondition">delete by condition</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">max 500 rows</td>
		<td class="ok">max 500 rows</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findByPrimaryKey">find by primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findAll">find all</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findDynamic">find dynamic</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findByIndex">find by index</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findByCondition">find by condition</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#findByRef">find by reference</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#update">update by primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateColumn">update column by primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
	</tr>

	<tr class="sep">
		<td colspan="6"></td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateByPrimaryKey">raw update by primary key</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateAll">batch update all</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateDynamic">batch update dynamic</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateByIndex">batch update by index</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

	<tr class="dao">
		<td><a href="[dao-features]#updateByCondition">batch update by condition</a></td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ok">yes</td>
		<td class="ko">no</td>
		<td class="ko">no</td>
	</tr>

</table>

</div> <!-- section -->

</div> <!-- chapter -->
